package com.wgy.day39.注解.自定义注解;

/**
 * Created by pc on 2020/12/16 21:45
 * Description: LearningJava
 */
/*
 * 自定义注解:
 *     格式: 元注解
 *          public @interface 注解名称{
 *              属性列表;
 *          }
 *     本质:注解本质上就是一个接口,该接口默认继承Annotation接口
 *          public interface MyAnno extends Java.lang.annotation.Annotation
 *
 *     属性:接口中的抽象方法
 *
 *           要求1:属性的返回值类型有下列取值
 *                 基本数据类型
 *                 String类型
 *                 枚举类型
 *                 注解
 *                 以上类型的数组
 *
 *           要求2:定义了属性,在使用的时候就要给属性赋值
 *                 1.如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值
 *                 2.如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可
 *                 3.数组赋值时,值使用{}包裹,如果数组中只有一个值,则{}可以省略
 *
 *      元注解:用于描述注解的注解
 *            1.@Target:描述注解能够作用的位置
 *                      ElementType取值:
 *                                     Type:可以作用于类上
 *                                   Method:可以作用于方法上
 *                                    Field:可以作用于成员变量上
 *
 *            2.@Retention:描述注解被保留的阶段
 *                         @Retention(value=RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
 *            3.@Documented:描述注解是否被抽取到api文档中
 *            4.@Inherited:描述注解是否被子类继承
 */
public @interface Demo02MyAnno {
      //注解的属性:抽象方法
    public abstract int value();//属性返回值为 整数型
    public abstract String name()default "张三";//属性返回值为 字符串型
    public abstract Person per();//属性返回值为 枚举型
    public abstract MyAnno2 anno2();//属性返回值为 枚举型
    public abstract String[] str();//属性返回值为 字符串数组
 // public abstract Worker work(); 编译报错了 返回值Worker是class类,不在返回值类型中  不能定义为注解的属性


}
